package com.qp.basics.common.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.qp.basics.common.annotation.FiledColumnInfo;
import com.qp.basics.common.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.Date;

/**
 * 会员。
 */
@Entity
@Data
@Table(name="sys_user_info")
public class UserInfo extends BaseEntity implements UserDetails {
    @Id
    @NotNull(groups = Update.class)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ApiModelProperty(value = "ID", hidden = true)
    private Long id;
    /**
     * 用户名。
     */
    @FiledColumnInfo(queryType = "like")
    private String username;
    /**
     * 性别。
     */
    private String sex;
    /**生日*/
    private Date birthday;
    /**
     * 民族。
     */
    private String ethnicity;
    /**
     * 籍贯。
     */
    private String hometown;
    /**
     * 户口。
     */
    private String hukou;
    /**
     * 婚史。
     */
    private String maritalStatus;
    /**
     * 薪酬。
     */
    private String salary;
    /**
     * 密码
     */
    private String password;
    /**
     * 手机
     */
    @FiledColumnInfo(queryType = "like")
    private String mobile;
    /**
     * 工号。
     */
    @FiledColumnInfo(queryType = "=")
    private String staffNo;
    /**
     * 部门。
     */
    @JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "f_dept_id")
    private Dept dept;
    /**
     * 部门名称
     */
    @FiledColumnInfo(queryType = "like")
    private String deptName;
    /**
     * 分组名称。
     */
    @FiledColumnInfo(queryType = "like")
    private String groupName;
    /**
     * 所属公司。
     */
    @JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "company_id")
    @FiledColumnInfo(queryType = "=",formType = "TableSelect",fkTitleColName = "title")
    private Company company;
    /**
     * 公司名称。
     */
    @FiledColumnInfo(queryType = "like")
    private String companyName;
    /**
     * 用户类型。
     */
    @FiledColumnInfo(queryType = "=")
    private String userType;
    /**
     * 用户子类型。
     */
    @FiledColumnInfo(queryType = "=")
    private String subUserType;

    /**
     * 角色。
     * @return
     */
    @Override
    @Transient
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    /**
     * 是否不过期。
     * @return
     */
    @Override
    @Transient
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 是否不锁定。
     * @return
     */
    @Override
    @Transient
    public boolean isAccountNonLocked() {
        return false;
    }

    /**
     * 是否证明不过期。
     * @return
     */
    @Override
    @Transient
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 是否可用。
     * @return
     */
    @Override
    @Transient
    public boolean isEnabled() {
        return true;
    }

    /**
     * 身份证
     */
    public String idCard;
    /**
     * 身份证后六位
     */
    public String idCardLastSix;
    /**
     * 用户积分
     */
    @Column(columnDefinition=" int default 0")
    public Integer points;
    /**
     * 用户已使用积分
     */
    @Column(columnDefinition=" int default 0")
    public Integer usePoints=0;
    /**
     * 微信小程序openid
     */
    private String openId;
    /** 公众号openID */
    private String mpOpenId;
    /** 统一ID */
    private String unionId;
    /**
     * 微信昵称
     */
    private String nickName;
    /**
     * 微信头像
     */
    private String wxLogo;
    /**
     * 地区
     */
    private String address;
    /**
     * 详细地址
     */
    private String addressDetail;
    /**
     * 收件人
     */
    private String recipients;
    /**
     * 收件人手机号
     */
    private String phone;
    /**
     * 会员卡
     */
    private String clubCard;
    /**
     * 介绍人。
     */
    private String introduceBy;
    /**
     * 介绍人openID。
     */
    private String introduceByOpenid;
    /**图片*/
    private String pic;
    /**
     * 感情状态。
     */
    private String loveStatus;
    /**
     * 年龄。
     */
    private Integer age;
    /**
     * 身高。
     */
    private Integer height;
    /**
     * 行业。
     */
    private String industry;
    /**
     * 学历。
     */
    private String education;
    /**
     * 房产情况。
     */
    private String fangchan;
    /**
     * 个人介绍。
     */
    private String remark;

    /**
     * 求职状态 字典hr_state
     */
    private String jobState;

    /**
     * 根据cid选择推送目标用户时使用
     */
    @Column(name = "cId",columnDefinition="varchar(100) COMMENT '推送目标用户id'")
    @ApiModelProperty("根据cid选择推送目标用户时使用")
    private String cId;

    /**
     *图片地址
     */
    private String loveImage;

    // old sass
    /**
     * 用户积分
     */
    @Column(columnDefinition=" int default 0")
    public Integer integral=0;

    /**
     * 用户已使用积分
     */
    @Column(columnDefinition=" int default 0")
    public Integer useIntegral=0;
    //
}
